package com.javasoft.controller.YZX;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.javasoft.entity.YZX.DataDictionaryType;
import com.javasoft.service.YZX._interface.DataDictionaryTypeService;
import com.javasoft.service.ZSW.DataDictionaryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;
@Slf4j
@RestController
@RequestMapping("data-dictionary-types")
public class YZXController {


    @Autowired
    private DataDictionaryTypeService dataDictionaryTypeService;





    /**
     * 插入新的数据字典类型记录。
     *
     * @param datadictionaryType 包含要插入的数据字典类型的实体对象。
     * @return 如果插入成功，则返回 HTTP 201 Created 和 "Success"；否则返回 HTTP 400 Bad Request 和 "Fail"。
     */
    @PostMapping("/add")
    public ResponseEntity<String> insertDataDictionaryType(@RequestBody DataDictionaryType datadictionaryType) {
        try {
            boolean success = dataDictionaryTypeService.add(datadictionaryType) > 0;
            return ResponseEntity.status(success ? HttpStatus.CREATED : HttpStatus.BAD_REQUEST)
                    .body(success ? "Success" : "Fail");
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error: " + e.getMessage());
        }
    }

    /**
     * 根据 subType 查询数据字典类型列表。
     *
     * @param fixedtype 要查询的子类型。
     * @return 返回包含查询结果的列表，如果发生错误则返回 null。
     */
    @GetMapping("/list")
    public ResponseEntity<List<DataDictionaryType>> listByfixedType(@RequestParam(required = false) String fixedtype) {
        try {
            List<DataDictionaryType> result = dataDictionaryTypeService.findByfixedType(fixedtype);
            return ResponseEntity.ok(result);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
        }
    }


    /**
     * 根据 ID 删除指定的数据字典类型记录。
     *
     * @param id 要删除的数据字典类型的唯一标识符。
     * @return 如果删除成功，则返回 HTTP 204 No Content 和 "Deleted"；如果未找到记录，则返回 HTTP 404 Not Found 和 "Not Found"。
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<String> deleteDataDictionaryType(@PathVariable Long id) {
        try {
            boolean success = dataDictionaryTypeService.deleteById(id) > 0;
            return ResponseEntity.status(success ? HttpStatus.NO_CONTENT : HttpStatus.NOT_FOUND)
                    .body(success ? "Deleted" : "Not Found");
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error: " + e.getMessage());
        }
    }

    /**
     * 更新现有的数据字典类型记录。
     *
     * @param datadictionaryType 包含更新后数据字典类型的实体对象。
     * @return 如果更新成功，则返回 HTTP 200 OK 和 "Updated"；如果更新失败，则返回 HTTP 400 Bad Request 和 "Failed to update"。
     */
    @PutMapping("/update")
    public ResponseEntity<String> updateDataDictionaryType(@RequestBody DataDictionaryType datadictionaryType) {
        try {
            boolean success = dataDictionaryTypeService.update(datadictionaryType) > 0;
            return ResponseEntity.status(success ? HttpStatus.OK : HttpStatus.BAD_REQUEST)
                    .body(success ? "Updated" : "Failed to update");
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error: " + e.getMessage());
        }
    }






    /**
     * 分页查询数据字典类型。
     *
     * @param pageNum  页码，从1开始。
     * @param pageSize 每页显示的数量。
     * @param fixedType  要查询的子类型（可选）。
     * @return 返回包含分页查询结果的对象。
     */
    @GetMapping("/page")
    public ResponseEntity<IPage<DataDictionaryType>> pageQuery(
            @RequestParam(value = "pageNum", defaultValue = "1") int pageNum,
            @RequestParam(value = "pageSize", defaultValue = "10") int pageSize,
            @RequestParam(required = false) String fixedType) {
        try {
            IPage<DataDictionaryType> result = dataDictionaryTypeService.pageQuery(pageNum, pageSize, fixedType);
            return ResponseEntity.ok(result);
        } catch (Exception e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
        }
    }








    /**
     * 将 datadictionarytype 中的 subType 和 subTypeNumber 插入到 datadictionary 表中。
     *
     * @param dataDictionaryType 包含要插入的数据字典类型的实体对象。
     * @return 如果插入成功，则返回 HTTP 201 Created 和 "Success"；否则返回 HTTP 400 Bad Request 和 "Fail"。
     */
    @PostMapping("/insert-into-datadic")
    public ResponseEntity<String> insertIntoDataDictionary(@RequestBody DataDictionaryType dataDictionaryType) {
        try {
            boolean success = dataDictionaryTypeService.insertIntoDataDictionary(dataDictionaryType);
            return ResponseEntity.status(success ? HttpStatus.CREATED : HttpStatus.BAD_REQUEST)
                    .body(success ? "Success" : "Fail");
        } catch (Exception e) {
            log.error("Error during insertion into datadictionary: {}", e.getMessage(), e);
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Error: " + e.getMessage());
        }
    }




}